package com.banesco.precargadepositos.interfaz.presentadores;

import java.util.Vector;

import net.rim.device.api.ui.Field;
import net.rim.device.api.ui.FieldChangeListener;
import net.rim.device.api.ui.UiApplication;

import com.banesco.comunes.entidades.IPreCarga;
import com.banesco.comunes.entidades.PreDeposito;
import com.banesco.comunes.entidades.PrePagoTdc;
import com.banesco.comunes.utilidades.Sesion;
import com.banesco.precargadepositos.interfaz.componentes.ListaBanesco;
import com.banesco.precargadepositos.interfaz.contratos.IConsultarPrecargas;
import com.banesco.precargadepositos.interfaz.vistas.MostrarPreDeposito;
import com.banesco.precargadepositos.interfaz.vistas.MostrarPrePagoTdc;


public class PresentadorConsultarPreCargas extends PresentadorBase {

	private IConsultarPrecargas _pantalla;
	private PreDeposito _predepositoConsulta;
	private Vector _precargasLocales;
	private Vector _eventosPreCargas;


	/**
	 * Constructor de la clase que recibe la instancia de la pantalla que lo esta generando
	 * 
	 * @param pantalla Instancia de la pantalla
	 */
	public PresentadorConsultarPreCargas(IConsultarPrecargas pantalla)
	{
		_pantalla = pantalla;
	}


	/**
	 * Metodo que realiza la carga inicial de la interfaz, cargando los componentes con todo lo necesario
	 */
	public void cargarPagina() 
	{
		ConsultarDepositosLocales();

		if(_precargasLocales != null)
		{
			CargarListaDeEventosDeInterfaz();
			_pantalla.setComponenteListaPredepositos(new ListaBanesco(_precargasLocales,_eventosPreCargas,false));

			_pantalla.agregar(_pantalla.getComponenteListaPredepositos()); 
		}
	}


	/**
	 * Metodo que consulta la lista de entidades persistentes locales para
	 * obtener la lista de predepositos creados en el telefono
	 */
	private void ConsultarDepositosLocales()
	{
		_precargasLocales = Sesion.ObtenerListaTicketsLocales();
	}


	/**
	 * Metodo que genera una lista de eventos para cada predeposito que se encuentre en el vector de predepositos locales
	 */
	private void CargarListaDeEventosDeInterfaz()
	{
		FieldChangeListener eventoClick;
		_eventosPreCargas = new Vector();

		for (int i = 0; i < _precargasLocales.size(); i++) 
		{
			final int valor = i;
			eventoClick = new FieldChangeListener()
			{
				public void fieldChanged(Field field, int context) {
					
					IPreCarga preCarga = (IPreCarga)_precargasLocales.elementAt(valor);
					
					if (preCarga.getClass().toString().equals(PreDeposito.class.toString()))
						UiApplication.getUiApplication().pushScreen(new MostrarPreDeposito((PreDeposito) preCarga));
					
					else if (preCarga.getClass().toString().equals(PrePagoTdc.class.toString()))
						UiApplication.getUiApplication().pushScreen(new MostrarPrePagoTdc((PrePagoTdc) preCarga));
				}
			};

			_eventosPreCargas.addElement(eventoClick);
		}
	}

	
	/**
	 *  Metodo principal del hilo
	 */
	public void run() 
	{
		MostrarDetallePrecarga();
	}


	/**
	 * Metodo que redirecciona a la pantalla que muestra el detalle de la precarga selecionada
	 */
	private void MostrarDetallePrecarga() 
	{
		UiApplication.getUiApplication().pushScreen(new MostrarPreDeposito(_predepositoConsulta));

	}


	/**
	 * Metodo no implementado en esta pantalla
	 */
	public boolean CamposValidos() {
		return false;
	}


}
